namespace Plugins.Engine.Internal
{
    using System;
    using Plugins.Core.Interfaces;
    using Plugins.Interfaces;

    internal interface IPluginObjectInternal : IPluginObjectActivator, IPluginObject, IPluginServiceProvider<IPluginObjectInternal>, IPluginService, IPluginServiceProvider<IPluginService>
    {
        bool IsPluginType(Type type);
        bool IsSubtype(Type type);

        Type InterfaceType { get; }
        Type ObjectType { get; }

        IPluginObjectActivatorInternal InternalActivator { get; }
        //void ProcessObject(PluginObjectAction action);
        //bool ProcessObject(PluginObjectPredicate mach);

        object GetCompatibleObject();
    }
}

